package com.qzl.common.netty.handler;


import com.qzl.common.common.RespConstant;
import com.qzl.common.exception.ChatException;
import com.qzl.common.netty.message.Message;
import com.qzl.common.netty.utis.ChatUtils;
import com.qzl.common.netty.utis.ResponseUtils;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;

/**
 * @author: qzl
 * @date : 2025/6/25 13:14
 * @description:
 */
public class ExceptionHandler extends ChannelInboundHandlerAdapter {
    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
        System.out.println("服务器发生异常: " + cause.getMessage());
        // 打印异常日志（可选）
//        cause.printStackTrace();
        Message errorMessage = new Message();
        errorMessage.setSequenceId(ChatUtils.getSequenceId());
        try {
            ChatException chatException = (ChatException) cause;
            // 构造错误消息
            errorMessage.setMessageType(chatException.getCode());
            errorMessage.setContent("服务器发生异常: " + chatException.getMessage());
        } catch (Exception e) {
            // 构造错误消息
            errorMessage.setMessageType(RespConstant.FAIL.getCode());
            errorMessage.setContent("服务器发生异常: " + cause.getMessage());
        }


        // 转换为 JSON 字符串并封装成 WebSocket Frame 发送给客户端
        ResponseUtils.sendCtxResponse(ctx, errorMessage);

        // 关闭连接（可选）
//        ctx.close();
    }
}
